/*
 *  Openmysee
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 */
#ifndef _MARQUISE_CXML_H
#define _MARQUISE_CXML_H

#import <msxml.dll> named_guids/*, rename_namespace("MSXML")*/
#include <stack>

class CXML
{
public:

#ifdef	UNICODE
	typedef	std::wstring mystring;
#else
	typedef std::string	 mystring;
#endif

	//init
	BOOL InitXml( );
	void unInitXml( );
	BOOL OpenXml(const std::string& strdata );

	//set node list
	long	SetNodelist ( LPCTSTR nodename );
	long GetNodelistNum (  );

	//iterate nodes

	BOOL	ToSubNodeList(LPCTSTR nodename);
	BOOL	BackParentNodeList();
	BOOL	ToNextNode();
	BOOL	ToNode(long l_index);
	BOOL	GetCurNodeAttrValue(mystring&	strAttrValue, LPCTSTR attrname );

	//dash!
	LPCTSTR GetNodeValue ( LPCTSTR name );
	BOOL	GetNodeAttrValue (mystring&	strAttrValue, long l_index, LPCTSTR nodename, LPCTSTR attrname );
	long  SearchByAttrValue ( LPCTSTR attrname, LPCTSTR attrvalue );


protected:
private:
	MSXML::IXMLDOMDocumentPtr m_plDomDocument;
	MSXML::IXMLDOMDocumentPtr m_plUrlDomDocument;
	MSXML::IXMLDOMElementPtr m_pDocRoot;
	MSXML::IXMLDOMNodeListPtr m_pnodelist;
	MSXML::IXMLDOMNodePtr m_pcurnode;
	long m_len;

	std::stack<MSXML::IXMLDOMNodeListPtr>	m_nodeliststack;
    std::stack<MSXML::IXMLDOMNodePtr>	    m_curnodestack;
};

#endif